<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        console.log(typeof NaN);//not a number,但是其自身是number

        // Object.is()从功能描述上和===功能一直，仅在+0和-0、NaN和NaN比较存在差异
        console.log(NaN===NaN);//false
        console.log(+0===-0);//true
        console.log(Object.is(+0,-0));//false
        console.log(Object.is(NaN,NaN));//true
        // var a=prompt("请输入一个数字")*1;//"aa"*1 "10"*1

        // while(Object.is(a,NaN)){
        //     a=prompt("请重新输入一个数字")*1;

        // }

        // Object.assign(target,source...)
        // 该方法用于将对象中所有可循环的属性，从一个或者多个对象复制到新的对象中
        // target描述承载复制结果的新对象，目标对象中的属性会被后续的对象的同名的属性覆盖
        // source指定待复制对象列表，如果完成多个对象的合并，后续对象中的属性会覆盖前面对象中相同的属性
        var obj1={
            a:1001,
            b:1002
        };
        var obj2={
            sex:"男",
            height:189,
            a:"嘻嘻嘻"
        };
        var obj3={
            username:"黄晓明",
            hobby:"演戏",
            arr:["吃饭","睡觉"]
        };
        Object.assign(obj1,obj2,obj3);//实现的是浅拷贝
        obj3.arr[1]="呵呵呵呵呵";
        console.log(obj1);


        // Object.keys()获取指定对象中所有可循环的属性，并返回构成属性名的列表
        // Object.values()获取指定对象中所有可循环的属性值，并返回构成属性值的列表
        // Object.entries()获取指定对象中所有可循环的属性名和属性值，并返回构成属性名和属性值的列表[[属性名1,属性值1],[属性名2,属性值2]]
        // Object.fromEntries()将上述的属性名和属性值的二维数组列表转换成标准对象结构

        var objs={
            username:"baby",
            age:20,
            sex:"女"
        };
        console.log(Object.keys(objs));//数组
        console.log(Object.values(objs));//数组
        console.log(Object.entries(objs));//二维数组
        var objsArr=Object.entries(objs);//二维数组
        var newObj=Object.fromEntries(objsArr);//将属性名和属性值的二维数组列表转换成标准对象结构
        console.log(newObj);
    </script>
</head>
<body>
    
</body>
</html>